# 使用 SQL 代理有一些优点。
# 它可以根据数据库的架构以及数据库的内容回答问题（例如它会检索特定表的描述）。它具有纠错能力，当执行生成的查询遇到错误时，
# 它能够捕获该错误，然后正确地重新生成并执行新的查询。

from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits.sql.base import create_sql_agent
from langchain_community.agent_toolkits.sql.toolkit import SQLDatabaseToolkit
from langchain.agents import AgentType
from langchain_ollama import ChatOllama
# 连接到FlowerShop数据库
db = SQLDatabase.from_uri("sqlite:///FlowerShop.db")

llm = ChatOllama(
    model="deepseek-r1:8b",
    base_url="http://localhost:11434",
    temperature=0.5,
    num_predict=512
)

# 创建SQL Agent
agent_executor = create_sql_agent(
    llm=llm,
    toolkit=SQLDatabaseToolkit(db=db, llm=llm),
    verbose=True,
    agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    handle_parsing_errors=True,
    return_intermediate_steps=True,
)

# 使用Agent执行SQL查询
questions = [
    "哪种鲜花的存货数量最少？",
    "平均销售价格是多少？"
]

for question in questions:
    try:
        result = agent_executor.invoke({"input": question})
    except Exception as e:
        print(f"错误信息: {e}")
 